/*
    单调栈-下

    前置知识 : 讲解052-单调栈-上

    除了单调栈最经典的用法之外，在很多问题里单调栈还可以 维持求解答案的可能性
    1）单调栈里的所有对象按照 规定好的单调性来组织
    2）当某个对象进入单调栈时，
    会从 栈顶开始 依次淘汰单调栈里 对后续求解答案没有帮助 的对象
    3）每个对象从栈顶弹出的时 结算当前对象参与的答案，随后这个对象 不再参与后续求解答案的过程
    4）其实是 先有对题目的分析！进而发现单调性，然后利用 单调栈的特征 去实现

    注意：
    单调栈可以和很多技巧交叉使用！
    比如：动态规划+单调栈优化，会在【扩展】课程里讲述

    ================================================

    题目1
    最大宽度坡
    给定一个整数数组 A，坡是元组 (i, j)，其中  i < j 且 A[i] <= A[j]
    这样的坡的宽度为 j - i，找出 A 中的坡的最大宽度，如果不存在，返回 0
    测试链接 : https://leetcode.cn/problems/maximum-width-ramp/

    ================================================

    题目2
    去除重复字母保证剩余字符串的字典序最小
    给你一个字符串 s ，请你去除字符串中重复的字母，使得每个字母只出现一次
    需保证 返回结果的字典序最小
    要求不能打乱其他字符的相对位置
    测试链接 : https://leetcode.cn/problems/remove-duplicate-letters/

    ================================================

    题目3
    大鱼吃小鱼问题
    给定一个数组arr，每个值代表鱼的体重
    每一轮，每条鱼都会吃掉右边离自己最近比自己体重小的鱼，每条鱼向右找只吃一条
    但是吃鱼这件事是同时发生的，也就是同一轮在A吃掉B的同时，A也可能被别的鱼吃掉
    如果有多条鱼在当前轮找到的是同一条小鱼，那么在这一轮，这条小鱼同时被这些大鱼吃
    请问多少轮后，鱼的数量就固定了
    比如 : 8 3 1 5 6 7 2 4
    第一轮 : 8吃3；3吃1；5、6、7吃2；4没有被吃。数组剩下 8 5 6 7 4
    第二轮 : 8吃5；5、6、7吃4。数组剩下 8 6 7
    第三轮 : 8吃6。数组剩下 8 7
    第四轮 : 8吃7。数组剩下 8
    过程结束，返回4
    测试链接 : https://www.nowcoder.com/practice/77199defc4b74b24b8ebf6244e1793de

    ================================================

    题目4
    统计全1子矩形的数量
    给你一个 m * n 的矩阵 mat，其中只有0和1两种值
    请你返回有多少个 子矩形 的元素全部都是1
    测试链接 : https://leetcode.cn/problems/count-submatrices-with-all-ones/

    注意：讲解052-单调栈-上，里面的“柱状图中最大的矩形”+“全是1的最大矩形”问题要先理解

*/